This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

1.6 kB 52 lines
1import type { Metadata } from 'next'; 2import Header from '@/components/navigation/header/Header'; 3import ProfileHeader from '@/features/profile/components/profileHeader/ProfileHeader'; 4import ProfileTabs from '@/features/profile/components/profileTabs/ProfileTabs'; 5import { Box, Container } from '@mantine/core'; 6import { Fragment, Suspense } from 'react'; 7import ProfileHeaderSkeleton from '@/features/profile/components/profileHeader/Skeleton.ProfileHeader'; 8import BackButton from '@/components/navigation/backButton/BackButton'; 9import { getProfile } from '@/features/profile/lib/dal'; 10 11interface Props { 12 params: Promise<{ handle: string }>; 13 children: React.ReactNode; 14} 15 16export async function generateMetadata({ params }: Props): Promise<Metadata> { 17 const { handle } = await params; 18 const profile = await getProfile(handle); 19 20 return { 21 title: profile.name, 22 description: 23 profile.description ?? `Explore ${profile.name}'s profile on Semble`, 24 }; 25} 26 27export default async function Layout(props: Props) { 28 const { handle } = await props.params; 29 30 return ( 31 <Fragment> 32 <Header> 33 <BackButton href="/home">Home</BackButton> 34 </Header> 35 <Suspense fallback={<ProfileHeaderSkeleton />} key={handle}> 36 <ProfileHeader handle={handle} /> 37 </Suspense> 38 <Box 39 style={{ 40 position: 'sticky', 41 top: 59, 42 zIndex: 1, 43 }} 44 > 45 <Container px={'xs'} mt={'md'} size={'xl'}> 46 <ProfileTabs handle={handle} /> 47 </Container> 48 </Box> 49 {props.children} 50 </Fragment> 51 ); 52}